anchors:
  git-repo-resource-source: &git-repo-resource-source
    uri: ((github-repo))
    username: ((github-username))
    password: ((github-ci-release-token))
    branch: ((branch))
  gradle-enterprise-task-params: &gradle-enterprise-task-params
    DEVELOCITY_ACCESS_KEY: ((gradle_enterprise_secret_access_key))
  sonatype-task-params: &sonatype-task-params
    SONATYPE_USERNAME: ((s01-user-token))
    SONATYPE_PASSWORD: ((s01-user-token-password))
    SONATYPE_URL: ((sonatype-url))
    SONATYPE_STAGING_PROFILE: ((sonatype-staging-profile))
  artifactory-task-params: &artifactory-task-params
    ARTIFACTORY_SERVER: ((artifactory-server))
    ARTIFACTORY_USERNAME: ((artifactory-username))
    ARTIFACTORY_PASSWORD: ((artifactory-password))
  build-project-task-params: &build-project-task-params
      BRANCH: ((branch))
      <<: *gradle-enterprise-task-params
  docker-resource-source: &docker-resource-source
    username: ((docker-hub-username))
    password: ((docker-hub-password))
  changelog-task-params: &changelog-task-params
    name: generated-changelog/tag
    tag: generated-changelog/tag
    body: generated-changelog/changelog.md
  github-task-params: &github-task-params
    GITHUB_USERNAME: ((github-username))
    GITHUB_TOKEN: ((github-ci-release-token))

resource_types:
- name: registry-image
  type: registry-image
  source:
    <<: *docker-resource-source
    repository: concourse/registry-image-resource
    tag: 1.8.0
- name: artifactory-resource
  type: registry-image
  source:
    <<: *docker-resource-source
    repository: springio/artifactory-resource
    tag: 0.0.18
- name: github-release
  type: registry-image
  source:
    <<: *docker-resource-source
    repository: concourse/github-release-resource
    tag: 1.8.0
- name: github-status-resource
  type: registry-image
  source:
    <<: *docker-resource-source
    repository: dpb587/github-status-resource
    tag: master
resources:
- name: git-repo
  type: git
  icon: github
  source:
    <<: *git-repo-resource-source
- name: ci-images-git-repo
  type: git
  icon: github
  source:
    uri: ((github-repo))
    branch: ((branch))
    paths: ["ci/images/*"]
- name: ci-image
  type: registry-image
  icon: docker
  source:
    <<: *docker-resource-source
    repository: ((docker-hub-organization))/spring-framework-ci
    tag: ((milestone))
- name: artifactory-repo
  type: artifactory-resource
  icon: package-variant
  source:
    uri: ((artifactory-server))
    username: ((artifactory-username))
    password: ((artifactory-password))
    build_name: ((build-name))
- name: github-pre-release
  type: github-release
  icon: briefcase-download-outline
  source:
    owner: spring-projects
    repository: spring-framework
    access_token: ((github-ci-release-token))
    pre_release: true
    release: false
- name: github-release
  type: github-release
  icon: briefcase-download
  source:
    owner: spring-projects
    repository: spring-framework
    access_token: ((github-ci-release-token))
    pre_release: false
jobs:
- name: build-ci-images
  plan:
    - get: git-repo
    - get: ci-images-git-repo
      trigger: true
    - task: build-ci-image
      privileged: true
      file: git-repo/ci/tasks/build-ci-image.yml
      output_mapping:
        image: ci-image
      vars:
        ci-image-name: ci-image
        <<: *docker-resource-source
    - put: ci-image
      params:
        image: ci-image/image.tar
- name: stage-milestone
  serial: true
  plan:
    - get: ci-image
    - get: git-repo
      trigger: false
    - task: stage
      image: ci-image
      file: git-repo/ci/tasks/stage-version.yml
      params:
        RELEASE_TYPE: M
        <<: *gradle-enterprise-task-params
    - put: artifactory-repo
      params: &artifactory-params
        signing_key: ((signing-key))
        signing_passphrase: ((signing-passphrase))
        repo: libs-staging-local
        folder: distribution-repository
        build_uri: "https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}"
        build_number: "${BUILD_PIPELINE_NAME}-${BUILD_JOB_NAME}-${BUILD_NAME}"
        disable_checksum_uploads: true
        threads: 8
        artifact_set:
          - include:
              - "/**/framework-api-*.zip"
            properties:
              "zip.name": "spring-framework"
              "zip.displayname": "Spring Framework"
              "zip.deployed": "false"
          - include:
              - "/**/framework-api-*-docs.zip"
            properties:
              "zip.type": "docs"
          - include:
              - "/**/framework-api-*-schema.zip"
            properties:
              "zip.type": "schema"
      get_params:
        threads: 8
    - put: git-repo
      params:
        repository: stage-git-repo
- name: promote-milestone
  serial: true
  plan:
    - get: ci-image
    - get: git-repo
      trigger: false
    - get: artifactory-repo
      trigger: false
      passed: [stage-milestone]
      params:
        download_artifacts: false
        save_build_info: true
    - task: promote
      file: git-repo/ci/tasks/promote-version.yml
      params:
        RELEASE_TYPE: M
        <<: *artifactory-task-params
    - task: generate-changelog
      file: git-repo/ci/tasks/generate-changelog.yml
      params:
        RELEASE_TYPE: M
        <<: *github-task-params
        <<: *docker-resource-source
    - put: github-pre-release
      params:
        <<: *changelog-task-params
- name: stage-rc
  serial: true
  plan:
    - get: ci-image
    - get: git-repo
      trigger: false
    - task: stage
      image: ci-image
      file: git-repo/ci/tasks/stage-version.yml
      params:
        RELEASE_TYPE: RC
        <<: *gradle-enterprise-task-params
    - put: artifactory-repo
      params:
        <<: *artifactory-params
    - put: git-repo
      params:
        repository: stage-git-repo
- name: promote-rc
  serial: true
  plan:
    - get: ci-image
    - get: git-repo
      trigger: false
    - get: artifactory-repo
      trigger: false
      passed: [stage-rc]
      params:
        download_artifacts: false
        save_build_info: true
    - task: promote
      file: git-repo/ci/tasks/promote-version.yml
      params:
        RELEASE_TYPE: RC
        <<: *docker-resource-source
        <<: *artifactory-task-params
    - task: generate-changelog
      file: git-repo/ci/tasks/generate-changelog.yml
      params:
        RELEASE_TYPE: RC
        <<: *github-task-params
    - put: github-pre-release
      params:
        <<: *changelog-task-params
- name: stage-release
  serial: true
  plan:
    - get: ci-image
    - get: git-repo
      trigger: false
    - task: stage
      image: ci-image
      file: git-repo/ci/tasks/stage-version.yml
      params:
        RELEASE_TYPE: RELEASE
        <<: *gradle-enterprise-task-params
    - put: artifactory-repo
      params:
        <<: *artifactory-params
    - put: git-repo
      params:
        repository: stage-git-repo
- name: promote-release
  serial: true
  plan:
    - get: ci-image
    - get: git-repo
      trigger: false
    - get: artifactory-repo
      trigger: false
      passed: [stage-release]
      params:
        download_artifacts: true
        save_build_info: true
    - task: promote
      file: git-repo/ci/tasks/promote-version.yml
      params:
        RELEASE_TYPE: RELEASE
        <<: *docker-resource-source
        <<: *artifactory-task-params
        <<: *sonatype-task-params
- name: create-github-release
  serial: true
  plan:
    - get: ci-image
    - get: git-repo
    - get: artifactory-repo
      trigger: true
      passed: [promote-release]
      params:
        download_artifacts: false
        save_build_info: true
    - task: generate-changelog
      file: git-repo/ci/tasks/generate-changelog.yml
      params:
        RELEASE_TYPE: RELEASE
        <<: *docker-resource-source
        <<: *github-task-params
    - put: github-release
      params:
        <<: *changelog-task-params

groups:
- name: "releases"
  jobs: ["stage-milestone", "stage-rc", "stage-release", "promote-milestone", "promote-rc", "promote-release", "create-github-release"]
- name: "ci-images"
  jobs: ["build-ci-images"]
